package com.stargate.soft.scenario;

import java.sql.SQLException;

import com.stargate.bd.ConnectionBD;
import com.stargate.bd.bean.Acces;
import com.stargate.bd.bean.Entree;
import com.stargate.bd.bean.Etat;
import com.stargate.bd.dao.DAOFactory;
import com.stargate.bd.dao.factory.AccesDAO;
import com.stargate.exception.PersonneNonSortieException;

public class EnregistrerEntree {

	private Acces acces;
	private Entree entree;
	
	public EnregistrerEntree(Acces acces, Entree entree) throws SQLException {
		
		// transaction Serializable
		ConnectionBD.setSerializable();
		
		// insertion d'un accès
		AccesDAO accesDAO = new AccesDAO();
		accesDAO.insert(acces);
		int seqNum = accesDAO.getSeqNumAcces();

		// maj des objets acces et entree
		acces.setNumAcces(seqNum);
		entree.setNumAcces(seqNum);

		// insertion d'une entrée à ENABLE ou DISABLE
		try {
			DAOFactory.getEntreeDAO().insert(entree);
		} catch (SQLException e) {
			if (e.getErrorCode() == PersonneNonSortieException.ERROR_CODE) {
				// personne est toujours dans le batiment
				System.err.println(e.getMessage());
				// enregistrement d'une entrée à DISABLE
				entree.setEtatEntree(Etat.DISABLE);
				DAOFactory.getEntreeDAO().insert(entree);
			} else {
				throw e;
			}
		}
		
		// commit
		ConnectionBD.commit();
		
		this.acces = acces;
		this.entree = entree;
	}
	
	public Acces getAcces() {
		return acces;
	}
	
	public Entree getEntree() {
		return entree;
	}
	
}
